18564
22922
Я какое-то время возился с JSON, просто выталкивал его как текст, и это никому не повредило (насколько я знаю), но я хотел бы начать делать все правильно.
Я видел так много предполагаемых «стандартов» для типа содержимого JSON:
приложение / json
приложение / x-javascript
текст / javascript
текст / x-javascript
текст / x-json
Но какой из них правильный или лучший? Я так понимаю, что существуют разные проблемы с безопасностью и поддержкой браузера.
Я знаю, что есть аналогичный вопрос: "Какой тип MIME, если JSON возвращается REST API?", Но я хотел бы получить более конкретный ответ. 
1
2
следующий
Для текста JSON:
приложение / json
Тип мультимедиа MIME для текста JSON - application / json. Кодировка по умолчанию - UTF-8. (Источник: RFC 4627).
Для JSONP (исполняемый JavaScript) с обратным вызовом:
приложение / javascript
Вот несколько сообщений блога, которые были упомянуты в соответствующих комментариях:
Почему не следует использовать text / html для JSON
В Internet Explorer иногда возникают проблемы с application / json
Достаточно полный список Mimetypes и для чего их использовать
Официальный список типов mime в IANA из ответа @gnrfan ниже
|
IANA зарегистрировала официальный тип MIME для JSON как application / json.
Когда его спросили, почему не text / json, Крокфорд, похоже, ответил, что JSON на самом деле не является ни JavaScript, ни текстом, а также IANA с большей вероятностью раздаст application / *, чем text / *.
Дополнительные ресурсы:
Типы СМИ
Запрос комментариев 4627
bluesmoon: JSON имеет тип
|
Для JSON:
Тип содержимого: приложение / json
Для JSON-P:
Тип содержимого: приложение / javascript
|
Конечно, правильный тип носителя MIME для JSON - application / json, но необходимо понимать, какой тип данных ожидается в вашем приложении.
Например, я использую Ext GWT, и ответ сервера должен идти как text / html, но содержать данные JSON.
Клиентская сторона, слушатель формы Ext GWT
uploadForm.getForm (). addListener (новый FormListenerAdapter ()
{
@Override
public void onActionFailed (форма формы, int httpStatus, String responseText)
{
MessageBox.alert («Ошибка»);
}
@Override
public void onActionComplete (форма формы, int httpStatus, String responseText)
{
MessageBox.alert («Успех»);
}
});
В случае использования типа ответа application / json браузер предлагает мне сохранить файл.
Фрагмент исходного кода на стороне сервера с использованием Spring MVC
вернуть новый AbstractUrlBasedView ()
{
@SuppressWarnings ("не отмечено")
@Override
protected void renderMergedOutputModel (модель карты, запрос HttpServletRequest,
HttpServletResponse response) выдает исключение
{
response.setContentType ("текст / html");
response.getWriter (). написать (json);
}
};
|
JSON:
Ответ - это динамически генерируемые данные в соответствии с параметрами запроса, переданными в URL.
Пример:
{"Name": "Foo", "Id": 1234, "Rank": 7}
Тип содержимого: приложение / json
JSON-P:
JSON с заполнением.
Ответ - это данные JSON с обернутым вокруг них вызовом функции.
Пример:
functionCall ({"Имя": "Foo", "Id": 1234, "Rank": 7});
Тип содержимого: приложение / javascript
|
Если вы используете Ubuntu или Debian и обслуживаете файлы .json через Apache, вы можете захотеть обслуживать файлы с правильным типом содержимого. Я делаю это в первую очередь потому, что хочу использовать расширение Firefox JSONView.
Модуль Apache mod_mime поможет сделать это легко. Однако в Ubuntu вам нужно отредактировать файл /etc/mime.types и добавить строку
приложение / json json
Затем перезапустите Apache:
sudo service apache2 перезапуск
|
Если вы вызываете веб-службы ASP.NET со стороны клиента, вам необходимо использовать application / json, чтобы он работал. Я считаю, что это то же самое для фреймворков jQuery и Ext.
|
Правильный тип содержимого для JSON - application / json, ЕСЛИ вы не используете JSONP, также известный как JSON с заполнением, который на самом деле является JavaScript, поэтому правильным типом содержимого будет application / javascript.
|
Нет сомнений в том, что application / json - лучший тип MIME для ответа JSON.
Но у меня был опыт, когда мне приходилось использовать application / x-javascript из-за некоторых проблем со сжатием. Моя среда хостинга - это общий хостинг с GoDaddy. Они не позволяют мне изменять конфигурацию сервера. Я добавил в свой файл web.config следующий код для сжатия ответов.
















Используя это, страницы .aspx были сжаты с помощью g-zip, но ответы JSON - нет. я добавил

в разделах статических и динамических типов. Но это совсем не сжимает ответы JSON.
После этого я удалил этот недавно добавленный тип и добавил

в разделах статического и динамического типов и изменил тип ответа в
.ashx (асинхронный обработчик) в
приложение / x-javascript
И теперь я обнаружил, что мои ответы JSON были сжаты с помощью g-zip. Поэтому я лично рекомендую использовать
приложение / x-javascript
только если вы хотите сжать ответы JSON в среде общего хостинга. Потому что на виртуальном хостинге они не позволяют изменять IISконфигурации.
|
Только при использовании application / json в качестве типа MIME у меня есть следующее (по состоянию на ноябрь 2011 года с самыми последними версиями Chrome, Firefox с Firebug):
Больше никаких предупреждений от Chrome при загрузке JSON с сервера.
Firebug добавит вкладку в ответ, показывающую данные JSON.
отформатирован. Если тип MIME отличается, он будет отображаться как
«Содержание ответа».
|
Не все работает с типом содержимого application / json.
Если вы используете отправку формы Ext JS для загрузки файла, имейте в виду, что ответ сервера анализируется браузером для создания документа для